<?
class UploadPicture
{
	static function NoWatermark($fn)
	{
		$target = BASE_DIR.'/data/originals/'.$fn.'.nomark';
		if(!file_exists($target))
		{
			$fp = fopen($target, "w");
			fwrite($fp, "1");
			fclose($fp);
		}
	}
	
	static function Save($field_name, $fn)
	{
		if(!is_uploaded_file($_FILES[$field_name]['tmp_name'])) return false;
		
		self::CheckDirs($fn);
		
		self::Clear($fn); // удаляем предыдущую версию, если она есть
		
		$target = BASE_DIR.'/data/originals/'.$fn.'.jpg';
		
		// move_uploaded_file($_FILES[$field_name]['tmp_name'], $target );
		// вместо копирования, уменьшаем файл до размера 1200х1200:
		$info = getimagesize($_FILES[$field_name]['tmp_name']);
		if($info[0]>1200 || $info[1]>1200)
		{
			$im = new Imagick( $_FILES[$field_name]['tmp_name'] );
			$im->thumbnailImage(1200,1200,true);
			$im->writeImage($target);
		}
		else
		{
			move_uploaded_file($_FILES[$field_name]['tmp_name'], $target);
		}
		
		return true;
	}
	
	
	
	static function CheckDirs($fn)
	{
		// поскольку файл создается по датам, то
		// создаем нужные директории при необходимости
		$oldumask = umask(0);
		$parts = explode('/',$fn);
		$dirs = array_slice($parts, 0, sizeof($parts)-1);
		$id = $parts[sizeof($parts)-1];
		
		$path = '';
		foreach($dirs as $dir)
		{
			$path .= '/'.$dir;
			if( !file_exists(BASE_DIR.'/data/originals'.$path) )
			{
				mkdir(BASE_DIR.'/data/originals'.$path, 0775);
			}
			if( !file_exists(BASE_DIR.'/data/cache'.$path) )
			{
				mkdir(BASE_DIR.'/data/cache'.$path, 0775);
			}
		}
		umask( $oldumask );
	}
	
	
	
	static function Clear($fn)
	{
		if(!$fn) return;
		
		$mask_for_cache = BASE_DIR.'/data/cache/'.$fn;
		$target = BASE_DIR.'/data/originals/'.$fn.'.jpg';
		
		// удаляем оригинал
		if(file_exists($target)) unlink($target);
		// чистим кэш
		if(file_exists($mask_for_cache.'.jpg')) unlink($mask_for_cache.'.jpg');
		foreach (safe_glob($mask_for_cache.'-*.*') as $filename) unlink($filename);
		foreach (safe_glob($mask_for_cache.'t*.*') as $filename) unlink($filename);
		foreach (safe_glob($mask_for_cache.'n*.*') as $filename) unlink($filename);
	}
}